package my.design.combination;

import java.util.ArrayList;
import java.util.List;

/**
 * @author zp
 * @version 1.0
 * @description: TODO
 * @date 2022/10/11 19:56
 */
// 树枝构件角色类
public abstract class Composite implements Component {
    /**
     * 用来存储组合对象中包含的子组件对象
     */
    private final List<Component> childComponents = new ArrayList<Component>();
    /**
     * 组合对象的名字
     */
    private final String name;

    /**
     * 构造方法，传入组合对象的名字
     *
     * @param name 组合对象的名字
     */
    public Composite(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    /**
     * 聚集管理方法，增加一个子构件对象
     *
     * @param child 子构件对象
     */
    public void addChild(Component child) {
        childComponents.add(child);
    }

    /**
     * 聚集管理方法，删除一个子构件对象
     *
     * @param index 子构件对象的下标
     */
    public void removeChild(int index) {
        childComponents.remove(index);
    }

    /**
     * 聚集管理方法，返回所有子构件对象
     */
    public List<Component> getChild() {
        return childComponents;
    }

    /**
     * 输出对象的自身结构
     *
     * @param preStr 前缀，主要是按照层级拼接空格，实现向后缩进
     */
    public abstract void printStruct(String preStr);



}

